iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 18
0
Big Data

30天學會Data Integration - Kettle系列 第 18

Step - 資料庫Join

  • 分享至 

  • xImage
  •  

此篇要來介紹如何Join Table,使用的Step是[Lookup]Database Join,會以MSSQL的Northwind資料庫來示範。

[Lookup]Database Join介紹

此Step允許加入參數(前一個步驟的欄位值)來進行資料庫查詢,在SQL語法中使用?來表示參數的位置,可以有多個?號,而?號出現的順序 = 參數在Step中定義的順序。

本篇目標

取得每位員工所負責的訂單(含客戶與貨運商資料),總共四張Table,需要Join三次

Northwind資料庫圖表

http://ithelp.ithome.com.tw/upload/images/20161231/20091626OLEO1M0OKG.png

設定資料庫連線

在「Step - 讀取資料庫」篇中有說明如何設定Step中的連線,另外一種設定方式是直接在View頁籤中設定連線
http://ithelp.ithome.com.tw/upload/images/20161231/20091626smdYTOeR7j.png

設定方式與「Step - 讀取資料庫」篇一樣
http://ithelp.ithome.com.tw/upload/images/20161231/20091626KdFNbRYjT5.png

取得員工資料

新增、設定與預覽 Table Input,在「Step - 讀取資料庫」篇中也說過囉!快速帶過
http://ithelp.ithome.com.tw/upload/images/20161231/20091626HKUubuydpm.png

預覽資料
http://ithelp.ithome.com.tw/upload/images/20161231/20091626PF1aLWIpD3.png

取得員工負責的訂單

新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們要取得每個員工所負責的訂單,所以要開始來進行訂單資料的join,join的條件:訂單的EmployeeID = 員工的EmployeeID,所以需要在下方的Parameter的地方,定義上一個步驟「讀取員工資料」的EmployeeID來做為比對的值
http://ithelp.ithome.com.tw/upload/images/20161231/20091626aeyPeMBnyY.png

預覽,成功取得員工所負責的訂單資料,其中EmployeeID_1欄位是什麼意思呢?因為Employees與Orders資料表都有一個叫做EmployeeID的欄位,因為在Transformation中欄位是不可以重複的,所以這邊自動將Orders的EmployeeID欄位改以EmployeeID_1來定義
http://ithelp.ithome.com.tw/upload/images/20161231/20091626EIYAkQjcay.png

取得訂單的客戶資料

新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們要取得該訂單的客戶資料,所以要開始來進行客戶的資料join,join的條件:客戶的CustomerID = 訂單的CustomerID,所以需要在下方的Parameter的地方,定義上一個步驟「取得員工負責的訂單」的CustomerID來做為比對的值
http://ithelp.ithome.com.tw/upload/images/20161231/20091626GBV0teog7g.png

預覽資料
http://ithelp.ithome.com.tw/upload/images/20161231/20091626BCZ0VFVl9R.png

取得訂單的貨運商

新增與設定Database Join,請在Step name輸入名稱,以避免後續混淆;SQL的地方,因為我們要取得該訂單的貨運商資料,所以要開始來進行貨運商的資料join,join的條件:貨運商的ShipperID = 訂單的ShipVia,所以需要在下方的Parameter的地方,定義上一個步驟「取得員工負責的訂單」的ShipVia來做為比對的值
http://ithelp.ithome.com.tw/upload/images/20161231/20091626XnqiASZOR1.png

預覽資料,此時的欄位已經已經多到很難查看了,下方的橫向卷軸越來越寬XD,其實可以在下SQL時就指定欄位,或是使用[Transform]Select Values中的Select and Alter頁籤來設定要顯示的欄位,詳細可複習這一篇Step - 字串組合與欄位調整
http://ithelp.ithome.com.tw/upload/images/20161231/20091626ZiWET2xvvk.png


完成上述動作之後想必大家一定對於Database Join的設定很熟悉了,但可能會有個疑問,就是為什麼要這麼麻煩啊...!為什麼不在第一個Step(取得員工資料)使用Table Input時就直接一次下完join的SQL呢?

SELECT * FROM [Employees] AS [t0]
INNER JOIN [Orders] AS [t1] ON ([t0].[EmployeeID]) = [t1].[EmployeeID]
INNER JOIN [Customers] AS [t2] ON [t1].[CustomerID] = [t2].[CustomerID]
INNER JOIN [Shippers] AS [t3] ON [t1].[ShipVia]  = ([t3].[ShipperID])

答案是,如果所有資料表都在同一個資料庫,就可以在Table Input時一次下完join,但是如果資料表是屬於不同的資料庫,就只好乖乖使用Database Join囉(記得更改Connection即可)!

下一篇會繼續介紹別的Join方式

參考資料:https://northwinddatabase.codeplex.com/


上一篇
Step - 輸出Excel檔案
下一篇
Step - Merge Join與篩選資料
系列文
30天學會Data Integration - Kettle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言